package test;

import dao.UserDao;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import service.UserService;
import service.impl.UserServiceImpl;

/**
 * Bean的依赖注入：Spring框架核心IoC的具体实现
 */
public class SpringInjectTest_Bean {
    ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
    /**
     * setter方法实现bean对象的依赖注入：
     * 测试通过service层调用dao层方法
     * 其中dao层通过setter方法注入到service层
     */
    @Test
    public void testSaveBySetInject(){
        UserService userService = (UserService) app.getBean("userServiceBySet");
        userService.doSave();
        //以下这么写是错误的，因为这样写绕过了Spring的配置文件，不会将UserService放入Spring容器，
        //UserService中的UserDao不会被set依赖注入
//        UserService userService = new UserServiceImpl();
//        userService.doSave();
    }

    /**
     * 构造方法实现bean对象的依赖注入：
     * 测试通过service层调用dao层方法
     * 其中dao层通过构造方法注入到service层
     */
    @Test
    public void testSaveByConstructorInject(){
        UserService userService = (UserService) app.getBean("userServiceByConstructor");
        userService.doSave();
    }

    /**
     * 基本数据类型注入到bean中
     */
    @Test
    public void testInjectBasicDataType(){
        UserDao userDao = (UserDao) app.getBean("userDao_InjectBasicDataType");
        userDao.save();
    }

    /**
     * 集合数据类型注入到bean中
     */
    @Test
    public void testContainerBasicDataType(){
        UserDao userDao = (UserDao) app.getBean("userDao_InjectContainerDataType");
        userDao.save();
    }
}
